Remove no-pv-compat cmdline option.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Mon, 9 Jul 2007 13:06:22 +0000 (14:06 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Mon, 9 Jul 2007 13:06:22 +0000 (14:06 +0100)
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/domain.c
xen/arch/x86/e820.c
xen/arch/x86/x86_64/mm.c
xen/common/compat/kernel.c
xen/include/asm-x86/mm.h
xen/include/xen/compat.h

index bf83032a2974f42a6c881db0d960253bc9ce0f5c..38f46e0b9e061154bd635ed3ac99c467a7b27259 100644 (file)
@@ -308,8 +308,6 @@ int switch_compat(struct domain *d)
 
     if ( d == NULL )
         return -EINVAL;
-    if ( compat_disabled )
-        return -ENOSYS;
     if ( !may_switch_mode(d) )
         return -EACCES;
     if ( is_pv_32on64_domain(d) )
index 59743f4493ab0e72cfe2c8c6bd1cd9d82e7cb85e..54ebd32762415bdaf5572327fecbbe78f95480f5 100644 (file)
@@ -342,39 +342,6 @@ static void __init clip_4gb(void)
 #define clip_4gb() ((void)0)
 #endif
 
-#ifdef CONFIG_COMPAT
-static void __init clip_compat(void)
-{
-    unsigned long long limit;
-    unsigned int i;
-
-    if ( compat_disabled )
-        return;
-    /* 32-bit guests restricted to 166 GB (with current memory allocator). */
-    limit = (unsigned long long)(MACH2PHYS_COMPAT_VIRT_END -
-                                 __HYPERVISOR_COMPAT_VIRT_START) << 10;
-    for ( i = 0; i < e820.nr_map; i++ )
-    {
-        if ( (e820.map[i].addr + e820.map[i].size) <= limit )
-            continue;
-        printk("WARNING: Only the first %Lu GB of the physical memory map "
-               "can be accessed\n"
-               "         by compatibility mode guests. "
-               "Truncating the memory map...\n",
-              limit >> 30);
-        if ( e820.map[i].addr >= limit )
-            e820.nr_map = i;
-        else
-        {
-            e820.map[i].size = limit - e820.map[i].addr;
-            e820.nr_map = i + 1;
-        }
-    }
-}
-#else
-#define clip_compat() ((void)0)
-#endif
-
 static void __init clip_mem(void)
 {
     int i;
@@ -408,7 +375,6 @@ static void __init machine_specific_memory_setup(
     *raw_nr = nr;
     (void)copy_e820_map(raw, nr);
     clip_4gb();
-    clip_compat();
     clip_mem();
 }
 
index f7f7a7b8027e1b4d57b1560838778790126d4d4a..7db134545ccae0572a21e971685368ece2b9a4c5 100644 (file)
@@ -145,47 +145,42 @@ void __init paging_init(void)
         l2_ro_mpt++;
     }
 
-#ifdef CONFIG_COMPAT
-    if ( !compat_disabled )
+    /* Create user-accessible L2 directory to map the MPT for compat guests. */
+    BUILD_BUG_ON(l4_table_offset(RDWR_MPT_VIRT_START) !=
+                 l4_table_offset(HIRO_COMPAT_MPT_VIRT_START));
+    l3_ro_mpt = l4e_to_l3e(idle_pg_table[l4_table_offset(
+        HIRO_COMPAT_MPT_VIRT_START)]);
+    if ( (l2_pg = alloc_domheap_page(NULL)) == NULL )
+        goto nomem;
+    compat_idle_pg_table_l2 = l2_ro_mpt = page_to_virt(l2_pg);
+    clear_page(l2_ro_mpt);
+    l3e_write(&l3_ro_mpt[l3_table_offset(HIRO_COMPAT_MPT_VIRT_START)],
+              l3e_from_page(l2_pg, __PAGE_HYPERVISOR));
+    l2_ro_mpt += l2_table_offset(HIRO_COMPAT_MPT_VIRT_START);
+    /* Allocate and map the compatibility mode machine-to-phys table. */
+    mpt_size = (mpt_size >> 1) + (1UL << (L2_PAGETABLE_SHIFT - 1));
+    if ( mpt_size > RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START )
+        mpt_size = RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START;
+    mpt_size &= ~((1UL << L2_PAGETABLE_SHIFT) - 1UL);
+    if ( m2p_compat_vstart + mpt_size < MACH2PHYS_COMPAT_VIRT_END )
+        m2p_compat_vstart = MACH2PHYS_COMPAT_VIRT_END - mpt_size;
+    for ( i = 0; i < (mpt_size >> L2_PAGETABLE_SHIFT); i++ )
     {
-        /* Create user-accessible L2 directory to map the MPT for compatibility guests. */
-        BUILD_BUG_ON(l4_table_offset(RDWR_MPT_VIRT_START) !=
-                     l4_table_offset(HIRO_COMPAT_MPT_VIRT_START));
-        l3_ro_mpt = l4e_to_l3e(idle_pg_table[l4_table_offset(HIRO_COMPAT_MPT_VIRT_START)]);
-        if ( (l2_pg = alloc_domheap_page(NULL)) == NULL )
+        if ( (l1_pg = alloc_domheap_pages(NULL, PAGETABLE_ORDER, 0)) == NULL )
             goto nomem;
-        compat_idle_pg_table_l2 = l2_ro_mpt = page_to_virt(l2_pg);
-        clear_page(l2_ro_mpt);
-        l3e_write(&l3_ro_mpt[l3_table_offset(HIRO_COMPAT_MPT_VIRT_START)],
-                  l3e_from_page(l2_pg, __PAGE_HYPERVISOR));
-        l2_ro_mpt += l2_table_offset(HIRO_COMPAT_MPT_VIRT_START);
-        /*
-         * Allocate and map the compatibility mode machine-to-phys table.
-        */
-        mpt_size = (mpt_size >> 1) + (1UL << (L2_PAGETABLE_SHIFT - 1));
-        if ( mpt_size > RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START )
-            mpt_size = RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START;
-        mpt_size &= ~((1UL << L2_PAGETABLE_SHIFT) - 1UL);
-        if ( m2p_compat_vstart + mpt_size < MACH2PHYS_COMPAT_VIRT_END )
-            m2p_compat_vstart = MACH2PHYS_COMPAT_VIRT_END - mpt_size;
-        for ( i = 0; i < (mpt_size >> L2_PAGETABLE_SHIFT); i++ )
-        {
-            if ( (l1_pg = alloc_domheap_pages(NULL, PAGETABLE_ORDER, 0)) == NULL )
-                goto nomem;
-            map_pages_to_xen(
-                RDWR_COMPAT_MPT_VIRT_START + (i << L2_PAGETABLE_SHIFT),
-                page_to_mfn(l1_pg),
-                1UL << PAGETABLE_ORDER,
-                PAGE_HYPERVISOR);
-            memset((void *)(RDWR_COMPAT_MPT_VIRT_START + (i << L2_PAGETABLE_SHIFT)),
-                   0x55,
-                   1UL << L2_PAGETABLE_SHIFT);
-            /* NB. Cannot be GLOBAL as the pt entries get copied into per-VM space. */
-            l2e_write(l2_ro_mpt, l2e_from_page(l1_pg, _PAGE_PSE|_PAGE_PRESENT));
-            l2_ro_mpt++;
-        }
+        map_pages_to_xen(
+            RDWR_COMPAT_MPT_VIRT_START + (i << L2_PAGETABLE_SHIFT),
+            page_to_mfn(l1_pg),
+            1UL << PAGETABLE_ORDER,
+            PAGE_HYPERVISOR);
+        memset((void *)(RDWR_COMPAT_MPT_VIRT_START +
+                        (i << L2_PAGETABLE_SHIFT)),
+               0x55,
+               1UL << L2_PAGETABLE_SHIFT);
+        /* NB. Cannot be GLOBAL as the ptes get copied into per-VM space. */
+        l2e_write(l2_ro_mpt, l2e_from_page(l1_pg, _PAGE_PSE|_PAGE_PRESENT));
+        l2_ro_mpt++;
     }
-#endif
 
     /* Set up linear page table mapping. */
     l4e_write(&idle_pg_table[l4_table_offset(LINEAR_PT_VIRT_START)],
@@ -255,30 +250,26 @@ void __init subarch_init_memory(void)
             share_xen_page_with_privileged_guests(page, XENSHARE_readonly);
         }
     }
-#ifdef CONFIG_COMPAT
-    if ( !compat_disabled )
+
+    for ( v  = RDWR_COMPAT_MPT_VIRT_START;
+          v != RDWR_COMPAT_MPT_VIRT_END;
+          v += 1 << L2_PAGETABLE_SHIFT )
     {
-        for ( v  = RDWR_COMPAT_MPT_VIRT_START;
-              v != RDWR_COMPAT_MPT_VIRT_END;
-              v += 1 << L2_PAGETABLE_SHIFT )
+        l3e = l4e_to_l3e(idle_pg_table[l4_table_offset(v)])[
+            l3_table_offset(v)];
+        if ( !(l3e_get_flags(l3e) & _PAGE_PRESENT) )
+            continue;
+        l2e = l3e_to_l2e(l3e)[l2_table_offset(v)];
+        if ( !(l2e_get_flags(l2e) & _PAGE_PRESENT) )
+            continue;
+        m2p_start_mfn = l2e_get_pfn(l2e);
+
+        for ( i = 0; i < L1_PAGETABLE_ENTRIES; i++ )
         {
-            l3e = l4e_to_l3e(idle_pg_table[l4_table_offset(v)])[
-                l3_table_offset(v)];
-            if ( !(l3e_get_flags(l3e) & _PAGE_PRESENT) )
-                continue;
-            l2e = l3e_to_l2e(l3e)[l2_table_offset(v)];
-            if ( !(l2e_get_flags(l2e) & _PAGE_PRESENT) )
-                continue;
-            m2p_start_mfn = l2e_get_pfn(l2e);
-
-            for ( i = 0; i < L1_PAGETABLE_ENTRIES; i++ )
-            {
-                struct page_info *page = mfn_to_page(m2p_start_mfn + i);
-                share_xen_page_with_privileged_guests(page, XENSHARE_readonly);
-            }
+            struct page_info *page = mfn_to_page(m2p_start_mfn + i);
+            share_xen_page_with_privileged_guests(page, XENSHARE_readonly);
         }
     }
-#endif
 }
 
 long subarch_memory_op(int op, XEN_GUEST_HANDLE(void) arg)
index 07b1166ffda936459efa5450dc7907bd227e57ff..a655c9c227f3448855ae393373acddc82994d0a1 100644 (file)
@@ -45,9 +45,6 @@ CHECK_TYPE(domain_handle);
 
 #include "../kernel.c"
 
-int compat_disabled = 0;
-boolean_param("no-pv-compat", compat_disabled);
-
 /*
  * Local variables:
  * mode: C
index 31a58eabfe3b098eb7d969b779e6b33ab1a79ba7..43d03ec170b81f796e1f2d7fd10924a005e706f0 100644 (file)
@@ -315,8 +315,7 @@ TYPE_SAFE(unsigned long,mfn);
 #ifdef CONFIG_COMPAT
 #define compat_machine_to_phys_mapping ((unsigned int *)RDWR_COMPAT_MPT_VIRT_START)
 #define set_gpfn_from_mfn(mfn, pfn) \
-    ((void)(compat_disabled || \
-            (mfn) >= (RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) / 4 || \
+    ((void)((mfn) >= (RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) / 4 || \
             (compat_machine_to_phys_mapping[(mfn)] = (unsigned int)(pfn))), \
      machine_to_phys_mapping[(mfn)] = (pfn))
 #else
index bcd1d4ef6dcf6cc93b3f655cd880c04d5cbe659e..205f8436677a6a6ce5c52bc7e69357179ac5e437 100644 (file)
                 [1 - (&((k xen_ ## n *)0)->f1.f2.f3 != \
                    &((k compat_ ## n *)0)->f1.f2.f3) * 2]
 
-extern int compat_disabled;
-
 int hypercall_xlat_continuation(unsigned int *id, unsigned int mask, ...);
 
 /* In-place translation functons: */